package kr.hkit.powerjava.chapter11;

class Fly {
	String name;

	@Override
	public String toString() {
		return name;

	}

}

public class Car {

	int speed, gear;
	public String color;

	public void speedUp(int increment) {
		speed += increment;
	}

	public void speedDown(int decrement) {
		speed -= decrement;
	}

	@Override
	public String toString() {
		return String.format("Object [%s] -> Car [%s, %s, %s]",
				super.toString(), speed, gear, color);
	}

	public static void main(String[] args) {
		Car car = new Car();
		car.gear = 1;
		car.color = "red";
		car.speedUp(60);
		System.out.println(car);

		Object obj = car;// 부모이기때문에 가능
		System.out.println(obj.toString());

		// Car car2 = new Object(); 자식은 부모를 받지 못한다

		Car car2 = new Car();
		car2.gear = 2;
		car2.color = "blue";
		car.speedUp(80);

		Fly fly1 = new Fly();
		fly1.name = "fly01";

		Fly fly2 = new Fly();
		fly2.name = "fly02";

		/*
		 * 위의 네가지 정보를 담기위해서는 배열로
		 */
		/*
		 * Car[] arrCar = new Car[2]; Fly[] arrFly = new Fly[2];
		 * 
		 * arrCar[0] = car; arrCar[1] = car2;
		 * 
		 * arrFly[0] = fly1; arrFly[1] = fly2;
		 * 
		 * //이렇게 담아야 하고
		 * 
		 * prnArr(arrCar); prnArr(arrFly); //출력을 위해 오버라이딩됨
		 */
		// 하지만 부모는 자식을 다 받을수 있으므로
		// 오브젝트로 배열을 만들면 모두 받을수 있고 출력함수도 한번에 만들 수 있다
		Object[] arrObj = new Object[4];
		arrObj[0] = car;
		// arrObj[0].speedUp(50); 불가능 Object로 받았기때문에 car메소드 사용불가
		arrObj[1] = car2;
		arrObj[2] = fly1;
		arrObj[3] = fly2;

		prnArr(arrObj);
	}

	private static void prnArr(Object[] arrObj) {
		// TODO Object Print
		for (int i = 0; i < arrObj.length; i++) {
			System.out.println(arrObj[i]);
		}
	}
	/*
	 * private static void prnArr(Fly[] arrFly) { // TODO Fly Print for (int i =
	 * 0; i < arrFly.length; i++) { System.out.println(arrFly[i]); }
	 * System.out.println(); }
	 * 
	 * private static void prnArr(Car[] arrCar) { // TODO Car Print for (int i =
	 * 0; i < arrCar.length; i++) { System.out.println(arrCar[i]); }
	 * System.out.println(); }
	 */

}
